package jiangjie2;

import java.util.ArrayList;
import java.util.List;

/*
自定义泛型类(接口同理)
 */
public class GenericClass<T>{
    private String orderName;
    private int orderId;
    //类的内部结构就可以使用类的泛型
    private  T orderT;

    //静态方法中不能使用类的泛型，因为静态方法的创建早于泛型的创建
//    public static void show(T orderT){
//        System.out.println(orderT);
//    }
    public String getOrderName() {
        return orderName;
    }

    public void setOrderName(String orderName) {
        this.orderName = orderName;
    }

    public int getOrderId() {
        return orderId;
    }


    public void setOrderId(int orderId) {
        this.orderId = orderId;
    }



    public GenericClass(String orderName, int orderId, T orderT) {
        this.orderName = orderName;
        this.orderId = orderId;
        this.orderT = orderT;
    }

    public GenericClass() {
        //编译不通过:
        //T[] arr=new T[10];
        //编译通过:
        T[] arr=(T[])new Object[10];
    }
    //如下的三个方法都不是泛型方法:
    public T getOrderT(){
        return orderT;
    }

    public void setOrderT(T orderT) {
        this.orderT = orderT;
    }

    @Override
    public String toString() {
        return "GenericClass{" +
                "orderName='" + orderName + '\'' +
                ", orderId=" + orderId +
                ", orderT=" + orderT +
                '}';
    }

    //泛型方法:在方法中出现了泛型的结构，泛型参数与类的泛型参数没有任何关系
    //换句话说:泛型方法所属的类是不是泛型类都没有关系
    //泛型方法可以声明为静态的，原因:泛型参数是在调用方法时确定的，并非在实例化类时确定
    public static <E> List<E> copyFromArrayTolist(E[] arr){
        ArrayList<E> list=new ArrayList<>();
        for(E e:arr){
            list.add(e);
        }
        return list;
    }
}
